<?php 
/*
 module:		test
 create_time:	2020-08-08 13:32:02
 author:		
 contact:		
*/

namespace app\api\controller;

use app\api\service\TestService;
use app\api\model\Test as TestModel;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\Log;


use think\facade\Validate;
use think\facade\Filesystem;
use think\Image;


class Test extends Common {


	/**
	* @api {get} /Test/index 01、首页数据列表
	* @apiGroup Test
	* @apiVersion 1.0.0
	* @apiDescription  首页数据列表
	* @apiParam (输入参数：) {int}     		[limit] 每页数据条数（默认20）
	* @apiParam (输入参数：) {int}     		[page] 当前页码

	* @apiParam (失败返回参数：) {object}     	array 返回结果集
	* @apiParam (失败返回参数：) {string}     	array.status 返回错误码 201
	* @apiParam (失败返回参数：) {string}     	array.msg 返回错误消息
	* @apiParam (成功返回参数：) {string}     	array 返回结果集
	* @apiParam (成功返回参数：) {string}     	array.status 返回错误码 200
	* @apiParam (成功返回参数：) {string}     	array.data 返回数据
	* @apiParam (成功返回参数：) {string}     	array.data.list 返回数据列表
	* @apiParam (成功返回参数：) {string}     	array.data.count 返回数据总数
	* @apiSuccessExample {json} 01 成功示例
	* {"status":"200","data":""}
	* @apiErrorExample {json} 02 失败示例
	* {"status":" 201","msg":"查询失败"}
	*/
	function index(){
		$limit  = $this->request->get('limit', 20, 'intval');
		$page   = $this->request->get('page', 1, 'intval');

		$where = [];

		$field = '*';
		$orderby = 'id desc';

		$res = TestService::indexList(formatWhere($where),$field,$orderby,$limit,$page);
		return $this->ajaxReturn($this->successCode,'返回成功',htmlOutList($res));
	}

	/**
	* @api {post} /Test/add 02、添加
	* @apiGroup Test
	* @apiVersion 1.0.0
	* @apiDescription  添加
	* @apiParam (输入参数：) {string}			name 姓名 
	* @apiParam (输入参数：) {string}			student_num 学号 
	* @apiParam (输入参数：) {string}			tel 联系电话 
	* @apiParam (输入参数：) {string}			grade 年级 
	* @apiParam (输入参数：) {string}			major 专业 
	* @apiParam (输入参数：) {string}			class 班级 
	* @apiParam (输入参数：) {string}			g_des 就业方向 
	* @apiParam (输入参数：) {string}			u_name 单位/学校名称 
	* @apiParam (输入参数：) {string}			u_nature 单位性质 
	* @apiParam (输入参数：) {string}			u_vocation 单位行业 
	* @apiParam (输入参数：) {string}			u_positiion 工作职位类别 
	* @apiParam (输入参数：) {string}			o_daima 组织机构代码 
	* @apiParam (输入参数：) {string}			u_location1 单位所在地（省） 
	* @apiParam (输入参数：) {string}			u_location2 单位所在地（市） 
	* @apiParam (输入参数：) {string}			u_location3 单位所在地（县） 
	* @apiParam (输入参数：) {string}			u_address 单位所在地（精确到门派号） 
	* @apiParam (输入参数：) {string}			u_p_c 单位邮编 
	* @apiParam (输入参数：) {int}				u_dangan 单位是否接受档案 开启|1,关闭|0
	* @apiParam (输入参数：) {string}			rd_unitname 接收档案单位名称 
	* @apiParam (输入参数：) {string}			d_unitp_c 接收档案单位邮编 
	* @apiParam (输入参数：) {string}			d_unitaddr1 档案转寄单位所在地（省） 
	* @apiParam (输入参数：) {string}			d_unitaddr2 转寄单位所在地（市） 
	* @apiParam (输入参数：) {string}			d_unitaddr3 档案转寄单位所在地（县） 
	* @apiParam (输入参数：) {string}			d_unitaddr4 档案转寄单位所在地（精确到门派号） 
	* @apiParam (输入参数：) {string}			u_lingkman 单位联系人 
	* @apiParam (输入参数：) {string}			linkman_tel 单位联系人电话 
	* @apiParam (输入参数：) {string}			bq_unitname 报到证单位名称 
	* @apiParam (输入参数：) {string}			bq_unitaddr1 报到证单位所在地（省） 
	* @apiParam (输入参数：) {string}			bq_unitaddr2 报到证单位所在地（市） 
	* @apiParam (输入参数：) {string}			bq_unitaddr3 报到证单位所在地（县） 

	* @apiParam (失败返回参数：) {object}     	array 返回结果集
	* @apiParam (失败返回参数：) {string}     	array.status 返回错误码  201
	* @apiParam (失败返回参数：) {string}     	array.msg 返回错误消息
	* @apiParam (成功返回参数：) {string}     	array 返回结果集
	* @apiParam (成功返回参数：) {string}     	array.status 返回错误码 200
	* @apiParam (成功返回参数：) {string}     	array.msg 返回成功消息
	* @apiSuccessExample {json} 01 成功示例
	* {"status":"200","data":"操作成功"}
	* @apiErrorExample {json} 02 失败示例
	* {"status":" 201","msg":"操作失败"}
	*/
	function add(){
		$postField = 'name,student_num,tel,grade,major,class,g_des,u_name,u_nature,u_vocation,u_positiion,o_daima,u_location1,u_location2,u_location3,u_address,u_p_c,u_dangan,rd_unitname,d_unitp_c,d_unitaddr1,d_unitaddr2,d_unitaddr3,d_unitaddr4,u_lingkman,linkman_tel,bq_unitname,bq_unitaddr1,bq_unitaddr2,bq_unitaddr3';
		$data = $this->request->only(explode(',',$postField),'post',null);
		$res = TestService::add($data);

	
		return $this->ajaxReturn($this->successCode,'操作成功',$res);
	}

	/**
	* @api {post} /Test/update 03、修改
	* @apiGroup Test
	* @apiVersion 1.0.0
	* @apiDescription  修改
	
	* @apiParam (输入参数：) {string}     		id 主键ID (必填)
	* @apiParam (输入参数：) {string}			name 姓名 
	* @apiParam (输入参数：) {string}			student_num 学号 
	* @apiParam (输入参数：) {string}			tel 联系电话 
	* @apiParam (输入参数：) {string}			grade 年级 
	* @apiParam (输入参数：) {string}			major 专业 
	* @apiParam (输入参数：) {string}			class 班级 
	* @apiParam (输入参数：) {string}			g_des 就业方向 
	* @apiParam (输入参数：) {string}			u_name 单位/学校名称 
	* @apiParam (输入参数：) {string}			u_nature 单位性质 
	* @apiParam (输入参数：) {string}			u_vocation 单位行业 
	* @apiParam (输入参数：) {string}			u_positiion 工作职位类别 
	* @apiParam (输入参数：) {string}			o_daima 组织机构代码 
	* @apiParam (输入参数：) {string}			u_location1 单位所在地（省） 
	* @apiParam (输入参数：) {string}			u_location2 单位所在地（市） 
	* @apiParam (输入参数：) {string}			u_location3 单位所在地（县） 
	* @apiParam (输入参数：) {string}			u_address 单位所在地（精确到门派号） 
	* @apiParam (输入参数：) {string}			u_p_c 单位邮编 
	* @apiParam (输入参数：) {int}				u_dangan 单位是否接受档案 开启|1,关闭|0
	* @apiParam (输入参数：) {string}			rd_unitname 接收档案单位名称 
	* @apiParam (输入参数：) {string}			d_unitp_c 接收档案单位邮编 
	* @apiParam (输入参数：) {string}			d_unitaddr1 档案转寄单位所在地（省） 
	* @apiParam (输入参数：) {string}			d_unitaddr2 转寄单位所在地（市） 
	* @apiParam (输入参数：) {string}			d_unitaddr3 档案转寄单位所在地（县） 
	* @apiParam (输入参数：) {string}			d_unitaddr4 档案转寄单位所在地（精确到门派号） 
	* @apiParam (输入参数：) {string}			u_lingkman 单位联系人 
	* @apiParam (输入参数：) {string}			linkman_tel 单位联系人电话 
	* @apiParam (输入参数：) {string}			bq_unitname 报到证单位名称 
	* @apiParam (输入参数：) {string}			bq_unitaddr1 报到证单位所在地（省） 
	* @apiParam (输入参数：) {string}			bq_unitaddr2 报到证单位所在地（市） 
	* @apiParam (输入参数：) {string}			bq_unitaddr3 报到证单位所在地（县） 

	* @apiParam (失败返回参数：) {object}     	array 返回结果集
	* @apiParam (失败返回参数：) {string}     	array.status 返回错误码  201
	* @apiParam (失败返回参数：) {string}     	array.msg 返回错误消息
	* @apiParam (成功返回参数：) {string}     	array 返回结果集
	* @apiParam (成功返回参数：) {string}     	array.status 返回错误码 200
	* @apiParam (成功返回参数：) {string}     	array.msg 返回成功消息
	* @apiSuccessExample {json} 01 成功示例
	* {"status":"200","msg":"操作成功"}
	* @apiErrorExample {json} 02 失败示例
	* {"status":" 201","msg":"操作失败"}
	*/
	// function update(){
	// 	$postField = 'id,name,student_num,tel,grade,major,class,g_des,u_name,u_nature,u_vocation,u_positiion,o_daima,u_location1,u_location2,u_location3,u_address,u_p_c,u_dangan,rd_unitname,d_unitp_c,d_unitaddr1,d_unitaddr2,d_unitaddr3,d_unitaddr4,u_lingkman,linkman_tel,bq_unitname,bq_unitaddr1,bq_unitaddr2,bq_unitaddr3';
	// 	$data = $this->request->only(explode(',',$postField),'post',null);

		

      
	// 	$limit  = $this->request->get('limit', 20, 'intval');
	// 	$page   = $this->request->get('page', 1, 'intval');
	// 	$field = 'student_num';
	// 	$orderby = 'id desc';
	// 	$where['student_num'] =$data['student_num'];
	// 	$res = TestService::indexList(formatWhere($where),$field,$orderby,$limit,$page);
	//     $judge=empty($res['list']);
	    
	//     // return $this->ajaxReturn($this->successCode,'新增成功',$judge);

	//     if($judge==true ){
	//     	$res = TestService::add($data);
	//     	return $this->ajaxReturn($this->successCode,'新增成功');
			   
	//     }else{  
	//     	    if(empty($data['student_num'])){
	//     	    	return $this->ajaxReturn($this->successCode,'学号未填');

	//     	    }
 //                 $where['student_num'] =$data['student_num'];
	// 			 $res = TestService::update($where,$data);
	// 			 return $this->ajaxReturn($this->successCode,'修改成功',$res);	
	//     }
		
	// }

	/**
	* @api {post} /Test/delete 04、删除
	* @apiGroup Test
	* @apiVersion 1.0.0
	* @apiDescription  删除
	* @apiParam (输入参数：) {string}     		ids 主键id 注意后面跟了s 多数据删除

	* @apiParam (失败返回参数：) {object}     	array 返回结果集
	* @apiParam (失败返回参数：) {string}     	array.status 返回错误码 201
	* @apiParam (失败返回参数：) {string}     	array.msg 返回错误消息
	* @apiParam (成功返回参数：) {string}     	array 返回结果集
	* @apiParam (成功返回参数：) {string}     	array.status 返回错误码 200
	* @apiParam (成功返回参数：) {string}     	array.msg 返回成功消息
	* @apiSuccessExample {json} 01 成功示例
	* {"status":"200","msg":"操作成功"}
	* @apiErrorExample {json} 02 失败示例
	* {"status":"201","msg":"操作失败"}
	*/
	function delete(){
		$idx =  $this->request->post('ids', '', 'serach_in');
		if(empty($idx)){
			throw new ValidateException('参数错误');
		}
		$data['id'] = explode(',',$idx);
		try{
			TestModel::destroy($data);
		}catch(\Exception $e){
			abort(config('my.error_log_code'),$e->getMessage());
		}
		return $this->ajaxReturn($this->successCode,'操作成功');
	}

	/**
	* @api {get} /Test/view 05、查看详情
	* @apiGroup Test
	* @apiVersion 1.0.0
	* @apiDescription  查看详情
	
	* @apiParam (输入参数：) {string}     		id 主键ID

	* @apiParam (失败返回参数：) {object}     	array 返回结果集
	* @apiParam (失败返回参数：) {string}     	array.status 返回错误码 201
	* @apiParam (失败返回参数：) {string}     	array.msg 返回错误消息
	* @apiParam (成功返回参数：) {string}     	array 返回结果集
	* @apiParam (成功返回参数：) {string}     	array.status 返回错误码 200
	* @apiParam (成功返回参数：) {string}     	array.data 返回数据详情
	* @apiSuccessExample {json} 01 成功示例
	* {"status":"200","data":""}
	* @apiErrorExample {json} 02 失败示例
	* {"status":"201","msg":"没有数据"}
	*/
	function view(){
		$data['id'] = $this->request->get('id','','serach_in');
		$field='id,name,student_num,tel,grade,major,class,g_des,u_name,u_nature,u_vocation,u_positiion,o_daima,u_location1,u_location2,u_location3,u_address,u_p_c,u_dangan,rd_unitname,d_unitp_c,d_unitaddr1,d_unitaddr2,d_unitaddr3,d_unitaddr4,u_lingkman,linkman_tel,bq_unitname,bq_unitaddr1,bq_unitaddr2,bq_unitaddr3';
		$res  = checkData(TestModel::field($field)->where($data)->find());
		return $this->ajaxReturn($this->successCode,'返回成功',$res);
	}




	function tijiao(){
		$postField = 'id,user_id,name,student_num,tel,grade,major,class,g_des,u_name,u_nature,u_vocation,u_positiion,o_daima,u_location1,u_location2,u_location3,u_address,u_p_c,u_dangan,rd_unitname,d_unitp_c,d_unitaddr1,d_unitaddr2,d_unitaddr3,d_unitaddr4,u_lingkman,linkman_tel,bq_unitname,bq_unitaddr1,bq_unitaddr2,bq_unitaddr3,file';
		$data = $this->request->only(explode(',',$postField),'post',null);
       
		

      
		$limit  = $this->request->get('limit', 20, 'intval');
		$page   = $this->request->get('page', 1, 'intval');
		$field = 'student_num';
		$orderby = 'id desc';
		$where['student_num'] =$data['student_num'];
		$res = TestService::indexList(formatWhere($where),$field,$orderby,$limit,$page);
	    $judge=empty($res['list']);
	    


	    if($judge==true ){
	    	$res = TestService::add($data);
	    	return $this->ajaxReturn($this->successCode,'提交成功');
			   
	    }else{  
	    	    if(empty($data['student_num'])){
	    	    	return $this->ajaxReturn($this->errorCode,'学号未填');
	    	    }
                 $where['student_num'] =$data['student_num'];
				 $res = TestService::update($where,$data);
				 return $this->ajaxReturn($this->successCode,'修改成功',$res);	
	    }
		
	}

	function uoload_img(){
		if(!$_FILES) throw new ValidateException('上传验证失败');
		$file = $this->request->file(array_keys($_FILES)[0]);
		$upload_config_id = $this->request->param('upload_config_id','','intval'); //上传配置id

		if(!Validate::fileExt($file,config('my.api_upload_ext')) || !Validate::fileSize($file,config('my.api_upload_max'))){
			throw new ValidateException('上传验证失败');
		}
		//检测图片路径已存在  true 检测 读取已有的图片路径 false不检测 每次都重新上传新的
		$upload_hash_status = !is_null(config('my.upload_hash_status')) ? config('my.upload_hash_status') : true;
		$fileinfo = $upload_hash_status ? db("file")->where('hash',$file->hash('md5'))->find() : false;
		
			if($upload_hash_status && $fileinfo && $this->checkFileExists($fileinfo['filepath'])){
				$url =  $fileinfo['filepath'];
			}else{
				$url = $this->up($file,$upload_config_id);
			}
		return json(['status'=>config('my.successCode'),'data'=>$url]);
	}



}

